/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javamu;

/**
 * 
 * @author Administrator
 */
public class JavaMU {
	
	private int num = 1314;
	
	public static int MY_AGE = 27;

	/**
	 * @param args the command line arguments
	 */
	public static void main(String[] args) {
		// 定义一个字符串
		String s = "aljlkdsflkjsadjfklhasdkjlflkajdflwoiudsafhaasdasd";
        
        // 出现次数
		int num = 0;
        
         // 循环遍历每个字符，判断是否是字符 a ，如果是，累加次数
		for (int i = 0; i < s.length(); i++                          )
		{
            // 获取每个字符，判断是否是字符a
			if (s.charAt(i) == 'a'                 ) {
                // 累加统计次数
				num++; 
			}
		}
		System.out.println("字符a出现的次数：" + num);
		
		// Java文件名
		String fileName = "HelloWorld.java"; 
        // 邮箱
		String email = "laurenyang@imooc.com";
		
		// 判断.java文件名是否正确：合法的文件名应该以.java结尾
        /*
        参考步骤：
        1、获取文件名中最后一次出现"."号的位置
        2、根据"."号的位置，获取文件的后缀
        3、判断"."号位置及文件后缀名
        */
        //获取文件名中最后一次出现"."号的位置
		int index = fileName.indexOf('.');
        
        // 获取文件的后缀
		String prefix = fileName.substring(index+1, fileName.length());
        
		// 判断必须包含"."号，且不能出现在首位，同时后缀名为"java"
		if (  index > 0 && "java".equals(prefix) ) {
			System.out.println("Java文件名正确");
		} else {
			System.out.println("Java文件名无效" + index + prefix);
		}
		System.out.println("IS_OK");
		int max = (new JavaMU()).getMax(3, 4);
		System.out.println("最大值是"+max);
		System.out.println("当前数值是"+(new JavaMU(520)).getNowNum());
		System.out.println("我的名字是"+getMyName()); //当前静态方法
		System.out.println("我的年龄是"+MY_AGE);
		
		DoneClass dc = new  DoneClass();
		dc.say();
		dc.sayTo("陈峰展");
		dc.listen();
		
		BaseClass bc = new DoneClass(); //子类包含了基类的所有方法和属性，所以基类定义的变量类型可以用子类来实例化，反过来就不行了。
		//DoneClass dc2 = new BaseClass(); //这样定义是错误的
		
		AbcClass abc = new TabcClass(); //以抽象类作为变量类型是OK的，因为抽象类已具有要输出的形态，但是不能进行实例化
		abc.listenTo("梁燕萍");
		//AbcClass abc2 = new AbcClass(); //抽象类不能实例化
		
		Itf04Interface itf04 = new Titf04Class(); //可以以接口来定义类型，因为接口已具有要输出的形态，但不能进行实例化
		itf04.method0401(); //但是只剩下接口里已有的或继承的
		
		Titf04Class titf04 = new Titf04Class();
		titf04.method0101();
		titf04.method0201();
		titf04.method0301();
		titf04.method0401();
		
		//Itf03Interface itf03 = new Titf01Class(); //错误的
		
		Titf03Class titf03 = new Titf03Class();
		titf03.method0101();
		titf03.method0201();
		titf03.method0301();
		
		Itf01Interface itf01 = new Itf01Interface() {
			@Override
			public void method0101() {
				System.out.println("这是在匿名内部类实现的method0101");
			}
		};
		itf01.method0101();
	}
	
	/**
	 * 无参构造
	 */
	public JavaMU(){
		System.out.println("这是无参构造函数");
	}
	
	/**
	 * 有参构造
	 * @param num 设置num值
	 */
	public JavaMU(int num){
		this.num = num;
		System.out.println("这是有参构造函数");
	}
	
	/**
	 * 静态初始化代码块
	 */
	static{
		System.out.println("本代码块只执行一次，且在类被载入时执行");
	}
	
	/**
	 * 实例初始化块
	 */
	{
		System.out.println("本代码块会在每次实例化对象时执行一次，但不建议如此使用，应放置代码块在构造方法中");
	}
	
	public int getMax(int num1, int num2){
		return num1 >= num2 ? num1 : num2;
	}
	
	public int getNowNum(){
		return this.num;
	}
	
	/**
	 * 
	 * @return 
	 */
	public static String getMyName(){
		return "陈峰展";
	}
}
